package com.essential.program;

import java.util.Scanner;

/*
##输出
    System.out.println()来向屏幕输出一些内容。
    println是print line的缩写，表示输出并换行。因此，如果输出后不想换行，可以用print()
##格式化输出
    格式化输出?因为计算机表示的数据不一定适合人来阅读
    要把数据显示成我们期望的格式，就需要使用格式化输出的功能。
##占位符
    Java的格式化功能提供了多种占位符，可以把各种数据类型“格式化”成指定的字符串：
    占位符	说明
    %d	格式化输出整数
    %x	格式化输出十六进制整数
    %f	格式化输出浮点数
    %e	格式化输出科学计数法表示的浮点数
    %s	格式化字符串
    注意，由于%表示占位符，因此，连续两个%%表示一个%字符本身。
    占位符本身还可以有更详细的格式化参数。
    详细的格式化参数请参考JDK文档java.util.Formatter
##输入
    通过import语句导入java.util.Scanner，import是导入某个类的语句，必须放到Java源代码的开头，后面我们在Java的package中会详细讲解如何使用import。
    然后，创建Scanner对象并传入System.in。System.out代表标准输出流，而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的，但需要更复杂的代码，而通过Scanner就可以简化后续的代码。
    有了Scanner对象后，要读取用户输入的字符串，使用scanner.nextLine()，要读取用户输入的整数，使用scanner.nextInt()。Scanner会自动转换数据类型，因此不必手动转换。
    要测试输入，我们不能在线运行它，因为输入必须从命令行读取，因此，需要走编译、执行的流程
    $javac Main.java
    这个程序编译时如果有警告，可以暂时忽略它，在后面学习IO的时候再详细解释。编译成功后，执行：
    $ java Main
    Input your name: Bob
    Input your age: 12
    Hi, Bob, you are 12
    根据提示分别输入一个字符串和整数后，我们得到了格式化的输出。
##小结
    Java提供的输出包括：System.out.println() / print() / printf()，其中printf()可以格式化输出；
    Java提供Scanner对象来方便输入，读取对应的类型可以使用：scanner.nextLine() / nextInt() / nextDouble() / ...
 */
public class InOut {
    public static void main(String[] args) {
        //输出
        System.out.print("A,");
        System.out.print("B,");
        System.out.print("C.");
        System.out.println();
        System.out.println("END");

        //很难理解要表达的意思
        double d = 12900000;
        System.out.println(d); // 1.29E7
        //格式化输出
        System.out.printf("%.2f\n", d); // 显示两位小数3.14
        System.out.printf("%.4f\n", d); // 显示4位小数3.1416

        int n = 12345000;
        System.out.printf("n=%d, hex=%08x", n, n); // 注意，两个%占位符必须传入两个数

        //输入
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象
        System.out.print("Input your name: "); // 打印提示
        String name = scanner.nextLine(); // 读取一行输入并获取字符串
        System.out.print("Input your age: "); // 打印提示
        int age = scanner.nextInt(); // 读取一行输入并获取整数
        System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
    }
}
